#ifndef WINDOWIMP_HPP
#define WINDOWIMP_HPP

// This guard ensures that windows implementation is used only
// on windows platform.
#ifndef MY_USE_WIN32

    #error Windows version of __FILE__ is used without MY_USE_WIN32 defined.

#endif

#include <stdint.h>
#include <string>
#include <windows.h>

#include "Global/MyEngine.hpp"
#include "Pattern/Uncopyable.hpp"

namespace My
{
    class MY_SHARED WindowImp : private Uncopyable
    {
    public:
        static void Initialize();

    protected:
        WindowImp(const std::string& title, uint32_t width = 480, uint32_t height = 320);
        ~WindowImp();

    private:
        static LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);

        static LPCTSTR s_WindowClassName;

        HWND m_Handle;
    };
}

#endif // WINDOWIMP_HPP
